<!DOCTYPE html>
            
<HTML>
<HEAD>
<meta name="booktitle" content="Developing Applications With Objective Caml" >
 <meta charset="ISO-8859-1"><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
<META name="GENERATOR" content="hevea 1.05-7 of 2000-02-24">
<META NAME="Author" CONTENT="Christian.Queinnec@lip6.fr">
<LINK rel=stylesheet type="text/css" href="videoc-ocda.css">
<script language="JavaScript" src="videoc.js"><!--
//--></script>
<TITLE>
 To Learn More
</TITLE>
</HEAD>
<BODY class="regularBody">
<A HREF="book-ora120.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
<A HREF="index.html"><IMG SRC ="contents_motif.gif" ALT="Contents"></A>
<A HREF="book-ora123.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
<HR>

<H2> To Learn More</H2>For a better understanding of the C language, especially argument
passing and data representations, the book
<I>C: a reference manual</I> [<A HREF="book-ora214.html#Harbison89"><CITE>HS94</CITE></A>] is highly recommended.<BR>
<BR>
Concerning exceptions and garbage collection, several works add these
missing features to C. The technical report [<A HREF="book-ora214.html#Cexcept"><CITE>Rob89</CITE></A>] describes
an implementation of exceptions in C, based on open macros and
on the <TT>setjmp</TT> and <TT>longjmp</TT> functions from the C library.
Hans Boehm distributes a conservative collector with ambiguous roots
that can be added (as a library) to any C program:


<H3> Link </H3> <HR>

<A HREF="http://www.hpl.hp.com/personal/Hans_Boehm/gc/">http://www.hpl.hp.com/personal/Hans_Boehm/gc/</A>


<HR>

<BR>
<BR>
Concerning interoperability between Objective CAML and C, the tools
described in this chapter are rather low-level and difficult to use.
However, they give the programmer full control on copying or sharing
of data structures between the two languages. A higher-level tool
called <TT>CamlIDL</TT> is available; it automatically generates the
Objective CAML ``stubs'' (encapsulation functions) for calling C functions and
converting data types. The C types and functions are described in a
language called IDL (Interface Definition Language), similar to a subset of
C++ and C. This description is then passed through the <TT>CamlIDL</TT>
compiler, which generates the corresponding <TT>.mli</TT>, <TT>.ml</TT> and
<TT>.c</TT> files. This tool is distributed from the following page:
<A NAME="link-camlidl"></A>


<H3> Link </H3> <HR>

<A HREF="http://caml.inria.fr/camlidl/">http://caml.inria.fr/camlidl/</A>


<HR>

<BR>
<BR>
Other interfaces exist between Objective CAML and languages other than C.
They are available on the ``Caml hump'' page:


<H3> Link </H3> <HR>

<A HREF="http://caml.inria.fr/hump.html">http://caml.inria.fr/hump.html</A>


<HR>


They include several versions of interfaces with Fortran, and
also an Objective CAML bytecode interpreter written in Java.<BR>
<BR>
Finally, interoperability between Objective CAML and other languages can
also be achieved via data exchanges between separate programs,
possibly over the network. This approach is described in the chapter
on distributed programming (see chapter <A HREF="index.html#chap-PD">20</A>).<BR>
<BR>



<BR>
<BR>
<BR>
<BR>
<HR>
<A HREF="book-ora120.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
<A HREF="index.html"><IMG SRC ="contents_motif.gif" ALT="Contents"></A>
<A HREF="book-ora123.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
</BODY>
</HTML>
